package com.mdd.common.plugin.ali;

import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeCreateRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeCreateResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 支付宝支付
 *
 * @Description
 * @Author 幻速
 * @Date 2024/1/15 16:46
 **/
@Component
public class AliPayDriver {
    @Resource
    DefaultAlipayClient defaultAlipayClient;
    public  Object pay() throws AlipayApiException {
        /** 引用初始化方法，Config配置链接：https://opensupport.alipay.com/support/FAQ/08d46c24-15a8-4f1c-85a0-68fdf587f813  **/
        AlipayClient alipayClient = defaultAlipayClient;

        /** 实例化具体API对应的request类，类名称和接口名称对应,当前调用接口名称：alipay.trade.create（统一收单交易创建接口） **/
        AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();

        JSONObject content = new JSONObject();

        /****** 必传参数 ******/
        // 商户订单号,商户自定义，需保证在商户端不重复，如：20200612000001
        content.put("out_trade_no", "20200612000001");

        // 订单标题
        content.put("subject", "subject");

        // 订单金额，精确到小数点后两位
        content.put("total_amount", "0.01");

        // 买家的支付宝唯一用户号（2088开头的16位纯数字），可通过用户信息授权获取：https://opendocs.alipay.com/open/289/105656
        content.put("buyer_id", "2088开头的16位纯数字");

        // 销售产品码,小程序场景JSAPI_PAY支付固定值：JSAPI_PAY
        content.put("product_code", "JSAPI_PAY");

        // 小程序经营主体 APPID，入参前需要在商家中心进行关联
        content.put("op_app_id", "传入小程序的appid");
        /****** 可选参数 ******/
        // 扩展信息
        /*
         * JSONObject extendParams = new JSONObject(); // 设置服务商返佣pid
         * extendParams.put("sys_service_provider_id", "请输入服务商PID"); //
         * 花呗分期参数：hb_fq_num 代表花呗分期数，仅支持传入 3、6、12 extendParams.put("hb_fq_num",
         * "3"); // 花呗分期参数：hb_fq_seller_percent 代表卖家承担收费比例，商家承担手续费传入
         * 100，用户承担手续费传入 0 extendParams.put("hb_fq_seller_percent", "100");
         * Content.put("extend_params", extendParams);
         */

        // 封装请求参数到biz_content
        request.setBizContent(content.toString());

        /** 异步通知地址，以http或者https开头的，商户外网可以post访问的异步地址，用于接收支付宝返回的支付结果 **/
//        request.setNotifyUrl(content.notify_url);

        /**第三方调用（服务商模式），传值app_auth_token后，会收款至授权token对应商家账号 **/
//        request.putOtherTextParam("app_auth_token", Config.app_auth_token);

        AlipayTradeCreateResponse response = alipayClient.execute(request);

        /** 获取接口调用结果 **/
        System.out.println(response.getBody());
        return response.getBody();
    }

    public AlipayTradeRefundResponse refund(String tradeNo,Double amount,String outNo) throws AlipayApiException {
        AlipayClient alipayClient =defaultAlipayClient;
        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        JSONObject bizContent = new JSONObject();
        bizContent.put("trade_no", tradeNo);
        bizContent.put("refund_amount", amount);
        bizContent.put("out_request_no", outNo);

        request.setBizContent(bizContent.toString());
        AlipayTradeRefundResponse response = alipayClient.execute(request);
        if (response.isSuccess()) {
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
        return response;
    }
}
